import axios from 'axios';

// AI模型配置
const API_CONFIG = {
  mode: 'gpt-4-all', // 或者使用 'gpt-4o-image', 'gpt-4-all'
  baseUrl: 'https://yunwu.zeabur.app/v1/chat/completions',
  apiKey: 'sk-TsBRwtPOiNZ7ZuSi5uuf2amb7Z7MY1A21Xkn9uPVcnKhBW1X'
};

/**
 * 将图像编码为base64
 * @param {string} imageUrl - 图像URL或数据URL
 * @returns {Promise<string>} - base64编码的图像
 */
const getBase64FromImage = async (imageUrl) => {
  // 如果已经是数据URL，直接提取base64部分
  if (imageUrl.startsWith('data:')) {
    return imageUrl.split(',')[1];
  }

  // 否则，获取图像并转换为base64
  try {
    const response = await fetch(imageUrl);
    const blob = await response.blob();
    return new Promise((resolve, reject) => {
      const reader = new FileReader();
      reader.onloadend = () => {
        const base64String = reader.result.split(',')[1];
        resolve(base64String);
      };
      reader.onerror = reject;
      reader.readAsDataURL(blob);
    });
  } catch (error) {
    console.error('获取图像base64失败:', error);
    throw error;
  }
};

/**
 * 生成风格化图像
 * @param {string} imageBase64 - base64编码的图像
 * @param {string} styleDescription - 风格描述或提示
 * @returns {Promise<string>} - 生成的图像URL
 */
export const generateStyledImage = async (imageUrl, styleDescription, styleName) => {
  try {
    const imageBase64 = await getBase64FromImage(imageUrl);

    // 构建完整的提示
    let prompt = styleDescription;
    if (styleName && styleName !== 'custom' && styleName !== 'none') {
      prompt = `将这张图片转换为${styleName}风格。${styleDescription}`;
    }

    // 构建API请求
    const payload = {
      model: API_CONFIG.mode,
      messages: [
        {
          role: "user",
          content: [
            { type: "text", text: prompt },
            {
              type: "image_url",
              image_url: {
                url: `data:image/jpeg;base64,${imageBase64}`
              }
            }
          ]
        }
      ]
    };

    // 发送请求到AI模型API
    console.log('发送请求到API:', API_CONFIG.baseUrl);
    const response = await axios.post(API_CONFIG.baseUrl, payload, {
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${API_CONFIG.apiKey}`
      }
    });

    // 调试输出响应结构
    console.log('API响应结构:', JSON.stringify(response.data, null, 2));

    // 解析响应，获取结果图像URL
    if (response.data && response.data.choices && response.data.choices.length > 0) {
      const messageContent = response.data.choices[0].message.content;
      console.log('messageContent:', messageContent);
      // return messageContent;
      // 处理不同的响应格式
      if (Array.isArray(messageContent)) {
        // 如果content是数组格式
        const generatedImage = messageContent.find(item => item.type === 'image_url');
        if (generatedImage && generatedImage.image_url) {
          return generatedImage.image_url.url;
        }
      } else if (typeof messageContent === 'object' && messageContent.type === 'image_url') {
        // 如果content直接是图像对象
        return messageContent.image_url.url;
      } else if (typeof messageContent === 'string' && messageContent.startsWith('http')) {
        // 如果content直接是URL字符串
        return messageContent;
      } else {
        // 尝试解析JSON字符串
        try {
          if (typeof messageContent === 'string') {
            const parsedContent = JSON.parse(messageContent);
            if (parsedContent.image_url) {
              return parsedContent.image_url;
            }
          }
        } catch (e) {
          console.log('解析JSON失败:', e);
        }
      }
    }

    // 如果上面的处理都没有找到图像URL，记录完整响应并抛出错误
    console.error('无法从响应中提取图像URL。完整响应:', response.data);
    throw new Error('API响应中未找到生成的图像');

  } catch (error) {
    console.error('生成风格化图像失败:', error);
    throw error;
  }
};

export default {
  generateStyledImage
}; 